package cn.wen.yaling.xo.service;

import cn.wen.yaling.commons.utils.ResultEntity;
import cn.wen.yaling.commons.vo.*;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.wen.yaling.commons.utils.PageUtils;
import cn.wen.yaling.commons.entity.ArticleEntity;

import java.util.List;
import java.util.Map;

/**
 * 
 *
 * @author FY
 * @email 932043654@qq.com
 * @date 2022-08-13 02:07:37
 */
public interface ArticleService extends IService<ArticleEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 获取全部的文章
     * @return
     */
    List<ArticleListVO> articleListByPage();

    /**
     * 获取所有状态为0 的文章数
     * @return
     */
    List<ArticleVO> getAllArticleList();

    /**
     * 获得推荐的博客
     * @return
     */
    List<ArticleSimpleVO> getArticleRecommendList();

    /**
     * 获取前8最热的文章
     * @return
     */
    List<ArticleSimpleVO> getArticleHottestList();

    /**
     * 传入limit数获取最新的数据
     * @param limit
     * @return
     */
    List<ArticleSimpleVO> getArticleNewLimitNum(Integer limit);

    /**
     * 文章总数
     * @return
     * @param status
     */
    Long getArticleCountByStatus(int status);

    /**
     * 通过文章Id获取详细信息
     * @param articleId
     * @return
     */
    ArticleVO getArticleInfoById(Integer articleId);

    /**
     * 通过typeId 和 类型 和优先级获取文章列表
     * @param typeId
     * @return
     */
    List<ArticleVO> getArticleListByTypeId(Integer typeId);

    /**
     * 通过标签Id获取当前激活的全部文章
     * @param tagId
     * @return
     */
    List<ArticleSimpleVO> getArticleHotListByTag(Integer tagId, Integer limit);

    /**
     * 通过类型Id获取当前激活的全部文章
     * @param type
     * @return
     */
    List<ArticleSimpleVO> getArticleHotListByType(Integer type, Integer limit);

    /**
     * 获取归档的数据
     * @return
     */
    List<ArchiveArticleVO> getArchiveArticleList();

    /**
     * 通过文章 Id 获取文章阅读数
     * @param articleId
     * @param id
     */
    void updateArticleViewById(Integer articleId, Integer id);

    /**
     * 查询文章  通过文章的标题查询
     * @param queryVO
     * @return
     */
    List<ArticleListVO> getArticleByKeyword(QueryVO queryVO);

    /**
     * 添加文章
     * @param articleAddVO
     * @return
     */
    boolean addArticle(ArticleAddVO articleAddVO);

    /**
     * 修改文章
     * @param article
     * @return
     */
    boolean updateArticle(ArticleUpdateVO article);

    /**
     * 通过文章Id 来修改文章发布状态
     * @param articleId
     * @param isPublish
     * @return
     */
    boolean updateArticlePublishStatus(Integer articleId, Boolean isPublish);

    /**
     * 通过文章Id 将文章状态修改为删除状态
     * @param articleIds
     * @return
     */
    boolean updateArticleDeleteStatus(Integer[] articleIds);

    /**
     * 获取一年内的文章贡献数
     * @return
     */
    Map<String, Object> getBlogContributeCount();

    /**
     * 模糊查询
     * @param articleQueryVO
     * @return
     */
    List<ArticleVO> getArticleListBySearch(ArticleQueryVO articleQueryVO);

    /**
     * 将批量文章添加到指定的专栏中
     * @param articleIds
     * @param subjectId
     * @return
     */
    ResultEntity insertArticleToSubject(Integer[] articleIds, Integer subjectId);

    /**
     * 将文章从专栏中移除
     * @param articleId
     * @param subjectId
     * @return
     */
    ResultEntity deleteArticleFromSubjectById(Integer articleId, Integer subjectId);

    /**
     * 更改文章推荐优先级
     * @param recommendList
     * @return
     */
    ResultEntity updateArticleRecommend(List<ArticleRecommendVO> recommendList);

    /**
     * 获取专题栏中的文章列表
     * @param typeId
     * @return
     */
    List<ArticleAdminVO> getSimpleArticleListByTypeId(Integer typeId);

    /**
     * 修改专题中文章优先级
     * @param articlePriorityList
     * @return
     */
    ResultEntity updateArticlePriority(List<ArticlePriorityVO> articlePriorityList);

    /**
     * 修改文章中的评论是否开启
     * @param articleId
     * @param status
     * @return
     */
    boolean updateArticleCommentStatus(Integer articleId, Boolean status);

    /**
     * 修改文章的赞赏功能
     * @param articleId
     * @param status
     * @return
     */
    boolean updateArticleAppreciationStatus(Integer articleId, Boolean status);

    /**
     * 获取推荐文章列表通过Level
     * @param level
     * @return
     */
    List<RecommendArticleVO> getRecommendListByLevel(Integer level);

    /**
     * 批量修改推荐等级
     * @param list
     * @return
     */
    ResultEntity updateBatchRecommendArticle(List<RecommendArticleVO> list);
}

